{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "941b75c5",
   "metadata": {},
   "source": [
    "# 9.1 序列建模"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d8e691b",
   "metadata": {},
   "source": [
    "序列建模是一种用于处理序列数据的机器学习技术。序列建模的目标通常是将序列数据转换为固定的表示方法，然后使用这种表示方法进行分类、聚类、回归或者其他任务。序列建模的常用方法包括序列分类、序列标注、序列生成和序列预测等。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d8eb816",
   "metadata": {},
   "source": [
    "## 9.1.1 序列数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14cc0e36",
   "metadata": {},
   "source": [
    "既然说要解决序列数据问题，那么首先应该明确它的范围，什么样的数据可以称为序列数据。\n",
    "\n",
    "序列数据是指具有序列特征的数据。在序列数据中，每一项数据都有一个与之相对应的位置，且后一项数据可能会受到前一项数据的影响。\n",
    "\n",
    "序列数据的种类很多，主要包括以下三种类型：时间序列、文本序列、图像序列。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c33ae42",
   "metadata": {},
   "source": [
    "### 9.1.1.1 时间序列"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98e2d91f",
   "metadata": {},
   "source": [
    "时间序列数据很好理解，就是指按照时间顺序排列的数据。常见的时间序列数据包括：\n",
    "\n",
    "环境数据：比如每小时的气温、每天的降雨量、每月的二氧化碳浓度等。\n",
    "\n",
    "经济数据：比如每天的股票价格、每月的通货膨胀率、每年的 GDP 等。\n",
    "\n",
    "社会数据：比如交通流量、每月的就业率、每年的人口数量等。\n",
    "\n",
    "健康数据：比如心率、血压、体重等。\n",
    "\n",
    "行为数据：比如电话通话次数、每周的社交活动次数、每月的出行次数等。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5dbc4631",
   "metadata": {},
   "source": [
    "### 9.1.1.2 文本序列"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8da50448",
   "metadata": {},
   "source": [
    "文本序列是指由一串有序的文本组成的序列。文本序列可以是一句话、一篇文章、一组评论等。在文本序列中，每一个文本部分都有一个与之相对应的位置，且后一部分文本可能会受到前一部分文本的影响。\n",
    "\n",
    "大家现在看到的这篇文章，其实也是文本序列数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76f0ab61",
   "metadata": {},
   "source": [
    "### 9.1.1.3 图像序列"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff08bd46",
   "metadata": {},
   "source": [
    "图像序列是指由一组有序的图像组成的序列。图像序列可以是动画、视频等。在图像序列中，每一帧图像都有一个与之相对应的位置，且后一帧图像可能会受到前一帧图像的影响。\n",
    "\n",
    "我们说手写数字识别不是序列数据，是应为它的上一张和下一张图像并没有联系。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d90d6f38",
   "metadata": {},
   "source": [
    "### 9.1.1.4 时间序列数据可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44941f08",
   "metadata": {},
   "source": [
    "说了这么多，不如动手实际导入一个时间序列数据。我们以金融数据为例，看看什么是时间序列数据。这里我们使用一个新的代码包，pandas_datareader,它里面有许多国外金融数据集，非常方便。\n",
    "GS10数据是最近五年月度的美国10年期国债固定收益，我们把它导入进来看看。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d0291e5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GS10</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DATE</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-01</th>\n",
       "      <td>2.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-01</th>\n",
       "      <td>2.84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-04-01</th>\n",
       "      <td>2.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-05-01</th>\n",
       "      <td>2.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-01</th>\n",
       "      <td>2.91</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            GS10\n",
       "DATE            \n",
       "2018-02-01  2.86\n",
       "2018-03-01  2.84\n",
       "2018-04-01  2.87\n",
       "2018-05-01  2.98\n",
       "2018-06-01  2.91"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas_datareader as pdr\n",
    "gs10 = pdr.get_data_fred('GS10')\n",
    "gs10.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "169d0a90",
   "metadata": {},
   "source": [
    "用matplotbib绘制一下图形看看。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f9080db0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(gs10)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "737c986c",
   "metadata": {},
   "source": [
    "我们绘制出了从2018年到今年，每个月的美国10年期国债收益率，从图中大家可以看出一些规律吗？"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5504007",
   "metadata": {},
   "source": [
    "## 9.1.2 序列模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d288d173",
   "metadata": {},
   "source": [
    "对这种序列数据进行预测的模型，就被称为序列模型。 比如在上面美国国债的数据集中，我们用$t$表示时间,$x_t$表示价格，我们想要通过之前所有的数据，预测t时间的数据，可以通过下面这个公式：\n",
    "\n",
    "$$x_t \\sim P(x_t|x_{t-1},\\dots,x_1)$$\n",
    "\n",
    "为了实现这个预测，我们可以建立一个回归预测模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98d1d711",
   "metadata": {},
   "source": [
    "## 9.1.3 序列建模"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a127ac63",
   "metadata": {},
   "source": [
    "下面我们用pytorch建立一个模型来实现序列数据的回归预测。\n",
    "\n",
    "首先是数据集，我们想要构建一个序列模型，也就是用$x_{t-1},\\dots,x_{t-n}$去预测$x_t$，这里的n是一个超参数，表示我们要用多少个数据去预测下一个数据。这里需要我们对数据集进行一下处理，生成$X_t={x_{t-1},\\dots,x_{t-n}}，y_t = x_t$这样形式的一组数据。然后再用DataLoader来读入数据集。具体代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f7581eaf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch.utils.data import DataLoader, TensorDataset\n",
    "\n",
    "#构造数据集\n",
    "num = len(gs10)\n",
    "time = torch.arange(1, num+1, dtype= torch.float32)\n",
    "x = torch.tensor(gs10['GS10'].to_list())\n",
    "n = 6\n",
    "features = torch.zeros((num - n, n))\n",
    "for i in range(n):\n",
    "    features[:, i] = x[i: num - n + i]\n",
    "    \n",
    "labels = x[n:].reshape((-1, 1))\n",
    "train_loader = DataLoader(TensorDataset(features[:num-n], labels[:num-n]), 4, shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2609bfc4",
   "metadata": {},
   "source": [
    "接下来我们构建一个简单的神经网络模型来进行模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "771b9a9b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 10/10 [00:00<00:00, 129.34it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1: Validation loss = 3.6255\n",
      "Epoch 2: Validation loss = 0.4247\n",
      "Epoch 3: Validation loss = 0.3386\n",
      "Epoch 4: Validation loss = 0.2181\n",
      "Epoch 5: Validation loss = 0.1744\n",
      "Epoch 6: Validation loss = 0.1521\n",
      "Epoch 7: Validation loss = 0.1500\n",
      "Epoch 8: Validation loss = 0.1383\n",
      "Epoch 9: Validation loss = 0.1359\n",
      "Epoch 10: Validation loss = 0.1312\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAc1ElEQVR4nO3de3BcZ5nn8e/TrdZdLTmSbLcsO3IuJOrYJGGUkMBgAixFmJlNioKpJbsLkxTBW1NcB4otLlXciipqYAt2GSiyKQgTZoEJFbKzGQhkqSVVSbYgRDa+y1lM4iRS5FiSLdnWXd3P/tEtqS1LVktq+XSf/n2qutTnnLfPedRl/86r855+29wdEREpfZGgCxARkcJQoIuIhIQCXUQkJBToIiIhoUAXEQmJiqAO3NLS4h0dHUEdXkSkJO3Zs2fQ3VsX2xZYoHd0dNDd3R3U4UVESpKZvbjUNl1yEREJCQW6iEhIKNBFREIisGvoIiKFMD09TW9vLxMTE0GXUlDV1dW0t7cTi8Xyfo0CXURKWm9vLw0NDXR0dGBmQZdTEO7O0NAQvb29bN++Pe/X6ZKLiJS0iYkJmpubQxPmAGZGc3Pziv/qUKCLSMkLU5jPWs3vVHKB/tyJs3z1sR7OTc4EXYqISFEpuUB/+dQY//3J5znafyboUkREAKivrw+6BKAEAz3ZFgfgiAJdROQ8JRfoicZqmmpj9CjQRaTIuDuf+tSn2LFjBzt37uShhx4CoL+/n127dnHDDTewY8cOnnrqKVKpFHffffdc229+85trPn7J3bZoZiQTcY68okAXkfN96V8PFzwbkm1xvvBvr8ur7SOPPMK+ffvYv38/g4OD3HTTTezatYsf//jHvOMd7+Bzn/scqVSKsbEx9u3bR19fH4cOHQJgeHh4zbUu20M3s2oz+72Z7Tezw2b2pUXa3G1mA2a2L/u4d82VXUQyEefoibPMpNLreRgRkRV5+umnueuuu4hGo2zatIk3v/nNPPvss9x000384Ac/4Itf/CIHDx6koaGBK664gueff56PfOQj/OpXvyIej6/5+Pn00CeBt7r7OTOLAU+b2S/d/XcL2j3k7h9ec0V56EzEmZxJ88LgKFdvargUhxSREpBvT/pS27VrF08++SS/+MUvuPvuu/nEJz7B+9//fvbv38/jjz/Offfdx09/+lMeeOCBNR1n2R66Z5zLLsayD1/TUddIA6MiUoze9KY38dBDD5FKpRgYGODJJ5/k5ptv5sUXX2TTpk188IMf5N5772Xv3r0MDg6STqd597vfzVe+8hX27t275uPndQ3dzKLAHuAq4Dvu/swizd5tZruA/wf8nbu/vMh+dgO7AbZt27bqoq9sracyGuFI/xnuvGHLqvcjIlJI73rXu/jtb3/L9ddfj5nxta99jc2bN/Pggw/y9a9/nVgsRn19PT/84Q/p6+vjnnvuIZ3OXDr+6le/uubjm3v+nW0zawL+J/ARdz+Us74ZOOfuk2b2n4B/5+5vvdi+urq6fC1fcPGX33qKy+oq+acPvH7V+xCR0tfT00NnZ2fQZayLxX43M9vj7l2LtV/RbYvuPgw8Ady+YP2Qu09mF78H/NlK9rsas3e6rOSEJCISZvnc5dKa7ZljZjXA24GjC9okchbvAHoKWOOiOhNxhkanGDg7uXxjEZEykM819ATwYPY6egT4qbv/3My+DHS7+6PAR83sDmAGOAXcvV4Fz5odGD3cf4aN8er1PpyIFDF3D90EXau5+rBsoLv7AeDGRdZ/Puf5Z4DPrPjoa9CZyAR6T/8Z3nLNxkt5aBEpItXV1QwNDYVqCt3Z+dCrq1fWWS25T4rOaqyJ0b6hRp8YFSlz7e3t9Pb2MjAwEHQpBTX7jUUrUbKBDtmBUd2LLlLWYrHYir7VJ8xKbnKuXMm2OC8MjjI2pbnRRURKOtA7E3Hc4eiJs0GXIiISuJIO9GR2YFTX0UVESjzQ2zfU0FBdobnRRUQo8UCfmxtdgS4iUtqBDpmB0aP9Z0mlNQWAiJS3kg/0zkSc8ekUx4dGgy5FRCRQJR/oGhgVEcko+UC/elM9FRHTwKiIlL2SD/SqiihXbazXwKiIlL2SD3TIDIzqkouIlLtwBHoizsmzk5obXUTKWmgCHdB1dBEpa6EI9E4FuohIOAJ9Q10lbY3VGhgVkbIWikAHDYyKiIQn0BNx/jRwjonpVNCliIgEYtlAN7NqM/u9me03s8Nm9qVF2lSZ2UNmdszMnjGzjnWp9iI6E3HSDs9pbnQRKVP59NAngbe6+/XADcDtZnbLgjYfAE67+1XAN4G/L2iVeUi2aWBURMrbsoHuGeeyi7HsY+HUhncCD2afPwy8zS7x129v3VBLfVWFBkZFpGzldQ3dzKJmtg84Cfza3Z9Z0GQL8DKAu88AI0BzAetcViRidCYaNDAqImUrr0B395S73wC0Azeb2Y7VHMzMdptZt5l1DwwMrGYXF5VMxOnpP0Nac6OLSBla0V0u7j4MPAHcvmBTH7AVwMwqgEZgaJHX3+/uXe7e1drauqqCL6YzEWd0KsVLp8YKvm8RkWKXz10urWbWlH1eA7wdOLqg2aPA32Sfvwf4jbtf8m6yBkZFpJzl00NPAE+Y2QHgWTLX0H9uZl82szuybb4PNJvZMeATwKfXp9yLe82mBqIR08CoiJSliuUauPsB4MZF1n8+5/kE8NeFLW3lqmNRrmyt08CoiJSl0HxSdFYyEVcPXUTKUugCvTMRp39kglOjU0GXIiJySYUu0DUwKiLlKnSBrrnRRaRchS7QW+qr2BSv0sCoiJSd0AU6aGBURMpTOAO9Lc6xk5obXUTKSygDvTMRZybtHDt5bvnGIiIhEcpAT2YHRnXZRUTKSSgD/fLmOmoroxoYFZGyEspAj0aMazc3qIcuImUllIEOmYHRnlfOEMCkjyIigQhtoHcm4pydnKH39HjQpYiIXBKhDXQNjIpIuQltoF+7OU7E0MCoiJSN0AZ6TWWU7S116qGLSNkIbaADJNsa1UMXkbIR7kBPxOkbHmdkbDroUkRE1l2oA70z0QBAzwn10kUk/EId6LNfdqHLLiJSDpYNdDPbamZPmNkRMztsZh9bpM1tZjZiZvuyj88vtq9LbWNDNS31VRoYFZGyUJFHmxngk+6+18wagD1m9mt3P7Kg3VPu/leFL3Ftkm1x9dBFpCws20N3935335t9fhboAbasd2GFkkzE+ePJs0zNpIMuRURkXa3oGrqZdQA3As8ssvlWM9tvZr80s+uWeP1uM+s2s+6BgYGVV7sKnYkGplOaG11Ewi/vQDezeuBnwMfdfeE1jL3A5e5+PfAPwL8stg93v9/du9y9q7W1dZUlr8x1bfrSaBEpD3kFupnFyIT5j9z9kYXb3f2Mu5/LPn8MiJlZS0ErXaXtLfVUxyIaGBWR0MvnLhcDvg/0uPs3lmizOdsOM7s5u9+hQha6WtGIcc1mDYyKSPjlc5fLG4H3AQfNbF923WeBbQDufh/wHuBvzWwGGAfe60U0EXkyEeexg/24O9nzjohI6Cwb6O7+NHDRFHT3bwPfLlRRhZZMNPCT37/EKyMTbGmqCbocEZF1EepPis6a/cRojy67iEiIlUWgX7M5jpm+7EJEwq0sAr2+qoKO5joNjIpIqJVFoENmYFQ9dBEJs/IJ9LY4L50a4+yE5kYXkXAqm0CfnRv96ImzAVciIrI+yibQk4lGQHOji0h4lU2gb4pXcVldpQJdREKrbALdzDQwKiKhVjaBDpmB0edePctMSnOji0j4lFWgdyYamJpJ8/zgaNCliIgUXFkFugZGRSTMyirQr2ito7JCc6OLSDiVVaDHohGu2dSgHrqIhFJZBTrMTwFQRNO1i4gURPkFelucU6NTnDw7GXQpIiIFVXaB3pnIzI2uyy4iEjZlF+jXZud00cCoiIRN2QV6vDrGtstq1UMXkdBZNtDNbKuZPWFmR8zssJl9bJE2ZmbfMrNjZnbAzF63PuUWhqYAEJEwyqeHPgN80t2TwC3Ah8wsuaDNO4Grs4/dwHcLWmWBJdviHB8aZXRyJuhSREQKZtlAd/d+d9+bfX4W6AG2LGh2J/BDz/gd0GRmiYJXWyCdiTjumhtdRMJlRdfQzawDuBF4ZsGmLcDLOcu9XBj6mNluM+s2s+6BgYEVllo4ybbsnS667CIiIZJ3oJtZPfAz4OPuvqokdPf73b3L3btaW1tXs4uCaGusprEmpoFREQmVvALdzGJkwvxH7v7IIk36gK05y+3ZdUVJc6OLSBjlc5eLAd8Hetz9G0s0exR4f/Zul1uAEXfvL2CdBZdsi/PciTOk0poCQETCoSKPNm8E3gccNLN92XWfBbYBuPt9wGPAXwDHgDHgnoJXWmCdiTgT02leGBzlqo31QZcjIrJmywa6uz8N2DJtHPhQoYq6FJKJ+YFRBbqIhEHZfVJ01lUb64lFTQOjIhIaZRvolRURrt7YoIFREQmNsg10yAyMqocuImFR3oGeiDN4bpKTZyeCLkVEZM3KOtBn50bv6dcUACJS+so60JP6sgsRCZGyDvTG2hhbmmo0MCoioVDWgQ6zA6MjQZchIrJmCvREnBcGRxmfSgVdiojImpR9oHcm4qQdnntVA6MiUtrKPtCva9PAqIiEQ9kHevuGGhqqKjjSr+voIlLayj7QzYxOfWJUREKg7AMdMgOjR0+cJa250UWkhCnQyQT62FSKF0+NBV2KiMiqKdDJ+dJoXXYRkRKmQCczN3pFxDQwKiIlTYEOVMeiXLWxXj10ESlpCvSsZCKuOV1EpKQtG+hm9oCZnTSzQ0tsv83MRsxsX/bx+cKXuf6SbXFePTPJ0LnJoEsREVmVfHro/wjcvkybp9z9huzjy2sv69LT3OgiUuqWDXR3fxI4dQlqCdRsoGtgVERKVaGuod9qZvvN7Jdmdt1Sjcxst5l1m1n3wMBAgQ5dGJfVVZJorNbAqIiUrEIE+l7gcne/HvgH4F+Wauju97t7l7t3tba2FuDQhaWBUREpZWsOdHc/4+7nss8fA2Jm1rLmygKQbIvzp4FRJqY1N7qIlJ41B7qZbTYzyz6/ObvPobXuNwidiTiptPPHV88FXYqIyIpVLNfAzH4C3Aa0mFkv8AUgBuDu9wHvAf7WzGaAceC97l6Ss1wlcwZGd7Y3BlyNiMjKLBvo7n7XMtu/DXy7YBUFaNtltdRVRjUwKiIlSZ8UzRGJGJ0aGBWREqVAXyDZFqenX3Oji0jpUaAvkEzEOTc5Q+/p8aBLERFZEQX6AvrEqIiUKgX6AtdsbiBi+rILESk9CvQFqmNRrmyt18CoiJQcBfoiZgdGRURKiQJ9EclEnL7hcYbHpoIuRUQkbwr0RcwPjOqyi4iUDgX6IuYCXQOjIlJCFOiLaG2oYmNDlXroIlJSFOhLSLbF1UMXkZKiQF9CMhHnTwPnmJpJB12KiEheFOhL6EzEmU45fzyp2xdFpDQo0JeQbNPAqIiUFgX6Ejqa66iJRTUwKiIlQ4G+hGjEuDbRoB66iJQMBfpFJBNxevrPUKLfqCciZUaBfhHJtjhnJmboG9bc6CJS/BToF6FPjIpIKVk20M3sATM7aWaHlthuZvYtMztmZgfM7HWFLzMY125uwExzuohIacinh/6PwO0X2f5O4OrsYzfw3bWXVRxqKyvY3lKnHrqIlIRlA93dnwROXaTJncAPPeN3QJOZJQpVYNCSiTg9JxToIlL8CnENfQvwcs5yb3bdBcxst5l1m1n3wMBAAQ69/pJtcV4+Nc7I+HTQpYiIXNQlHRR19/vdvcvdu1pbWy/loVdtdmD0qK6ji0iRK0Sg9wFbc5bbs+tC4Tp92YWIlIhCBPqjwPuzd7vcAoy4e38B9lsUWhuqaKmv1MCoiBS9iuUamNlPgNuAFjPrBb4AxADc/T7gMeAvgGPAGHDPehUbBDOjUwOjIlIClg10d79rme0OfKhgFRWhZFucHzx9nOlUmlhUn8USkeKkdMpDMhFnKpXmTwPngi5FRGRJCvQ8JDUFgIiUAAV6Hra31FFVEVGgi0hRU6DnoSIa4drNDbp1UUSKmgI9T8k2zY0uIsVNgZ6nZCLO6bFpTpyZCLoUEZFFKdDzpLnRRaTYKdDzdK0CXUSKnAI9T/VVFXQ012pgVESKlgJ9BWYHRkVEipECfQWSiTjHh8Y4NzkTdCkiIhdQoK+A5kYXkWKmQF+BZJvmRheR4qVAX4HN8Wo21MZ0p4uIFCUF+gqYmQZGRaRoKdBXKJmIc/TEWWZS6aBLERE5jwJ9hZJtcSZn0rwwOBp0KSIi51Ggr1CnvjRaRIqUAn2FrmytpzKqudFFpPjkFehmdruZPWdmx8zs04tsv9vMBsxsX/Zxb+FLLQ6xaITXbK5XD11Eis6yXxJtZlHgO8DbgV7gWTN71N2PLGj6kLt/eB1qLDrJRJz/03MSd8fMgi5HRATIr4d+M3DM3Z939yngn4E717es4pZMxBkanWLg7GTQpYiIzMkn0LcAL+cs92bXLfRuMztgZg+b2dbFdmRmu82s28y6BwYGVlFucZgdGD2syy4iUkQKNSj6r0CHu78W+DXw4GKN3P1+d+9y967W1tYCHfrS62zT3OgiUnzyCfQ+ILfH3Z5dN8fdh9x99vrD94A/K0x5xSleHWPrZTUaGBWRopJPoD8LXG1m282sEngv8GhuAzNL5CzeAfQUrsTilEzE2ffSMP/32CB9w+Ok0/ryaBEJ1rJ3ubj7jJl9GHgciAIPuPthM/sy0O3ujwIfNbM7gBngFHD3OtZcFG69opnHD7/Kf/jeMwBUVUS4vLmWjuY6Olrqsj9r2d5Sx6aGaiIR3Q0jIuvL3IPpWXZ1dXl3d3cgxy6U/pFxXhgY5fjQGMeHRnlhcJTjg6O8eGqMqZn5uV6qYxE6musygd9Sx/Zs6G9vqWNjQ5VufRSRvJnZHnfvWmzbsj10WVqisYZEYw1vuOr89am00z8yzvHBTNAfHxzl+NAox06e44mjA0zlTOxVE4tyeXOmJ58b9h0ttbTWK+xFJH8K9HUQjRjtG2pp31DLn1/dct62VNp5ZXg805sfGp0L/edOnOXXR15lJudafF1llMub67Jhn7mcs72ljsub62ipr1TYi8h5FOiXWDRibL2slq2X1bKL82/dnEml6ZsN+8H5SzmHXxnhV4dPkMoJ+4aqCi7PhvzVGxvY2R5n55YmWhuqLvWvJCJFQoFeRCqiES5vzvTAueb8bdOpNL2nxzk+ODrfux8a40DvCL842M/sUEiisZodWxp57ZZGdrQ3snNLIy31CnmRcqBALxGxaITt2YHUtyzYdm5yhsN9IxycffSO8Osjr85t39JUw44tcV7b3sTOLZmQ31BXeWl/ARFZdwr0EKivquD1VzTz+iua59admZjmcN8ZDvYNc7DvDAd7h3n88HzIt2+oyYR7eyOv3dLEji1xmmoV8iKlTIEeUvHqGLde2cytV86H/Mj4NIf7RjiQ05P/5aETc9u3XVabE/KNXLelkcaaWBDli8gqKNDLSGNNjDdc1cIbrpq/82Z4bIpDfWc40DfMob4R9vcO84uD/XPbO5prM9fk2xvZme3JN1Qr5EWKkQK9zDXVVvLnV7ecd3vl6dGp867H/+GlYX5+YD7kr2ipY2d2wHVntidfX6V/SiJB0/9CucCGukp2vaaVXa+Zv61y6NzkXMAf7Bvh9y+c4n/tewUAs0zIb7uslg21lTTWxthQW8mG2hiN2Z8baitpqo3RVFtJXWVU99CLrAMFuuSlub6K267ZyG3XbJxbN3B2kkN9IxzIhvyJM+P88eQ5hsemOTc5s+S+YlGjqbaSpprcoJ99Xpl9ngn/3O1VFdFL8auKlCwFuqxaa0MVb7l2I2+5duMF26Zm0oyMTzM8NsXpsczP4bFpTo9NMTy7fnSa4fEpXjo1xv7eTLvcOXAWqq2M0lSTDfq6GE01lTkngtkTQIzaygqqYxFqKqNUV0TnflZXRqiMRvTXgYSWAl3WRWVFhNaGqhV9ctXdmZhOc3psitNjU4yMTXM6exIYGZ/m9Ggm9EfGMz97Rs4wMjbN8Pj0eZ+ivZiIQXUsSk0sSnUsSnUssmB59gSQPSHktJttU7PYupyTRnUs8zxiYGYYmctSOpHIelOgS9EwM2oqo9RU1tDWVJP369Jp5+zkTPYEMMXYVIqJmRQTUynGp1NMTKezP+cf49MpxqfSc+0mZlKMTc1wanRqbvv8z6X/alj970o26HMCn8zK3OXZc0BuW3Jfu8h+Zl9hljmBVUQixKJGRTRCRcSIRSNURI1YJPOzIhohFrEFz7OvybaJZV974fal284epyISIRrJrTW3Xlv8981ZPu/53O+4+O9+wT5ytkXM5n5mHpntkZx189vn25fSiViBLiUvEjEaa2I01sTY1lxb8P27O5Mz6ZwTwfxJYnL6/JPG7LqJ6RRpB3dwPPtzboc4F26bXWZu2WebX9B+tq5F12fXgZNOw3Q6zUzKmUmnmU45M6k0M2lnOpVmaibN6FQqsy7l821TaabTfuH6Mvwil9yQNxYP/UhkZSeJu27exr1vuqLgtSrQRZZhZnOXXpqCLiZg7plQXyr8p7MnjplU5oQxe+JIpxeevPz8E1rueuZPSIudzC482S2+Dxa8Jj17THfSnllOzy3Pr3PP/NU3v7x8+7z2mbO8XvMrKdBFJG9mRixqxKJQg+46Kjb5fKeoiIiUAAW6iEhI5BXoZna7mT1nZsfM7NOLbK8ys4ey258xs46CVyoiIhe1bKCbWRT4DvBOIAncZWbJBc0+AJx296uAbwJ/X+hCRUTk4vLpod8MHHP35919Cvhn4M4Fbe4EHsw+fxh4m5XSzZsiIiGQT6BvAV7OWe7Nrlu0jbvPACNA84I2mNluM+s2s+6BgYHVVSwiIou6pIOi7n6/u3e5e1dra+vyLxARkbzlE+h9wNac5fbsukXbmFkF0AgMFaJAERHJTz4fLHoWuNrMtpMJ7vcC/35Bm0eBvwF+C7wH+I3PfpRrCXv27Bk0sxdXXjIALcDgKl8bRno/zqf3Y57ei/OF4f24fKkNywa6u8+Y2YeBx4Eo8IC7HzazLwPd7v4o8H3gn8zsGHCKTOgvt99VX3Mxs25371rt68NG78f59H7M03txvrC/H3l99N/dHwMeW7Du8znPJ4C/LmxpIiKyEvqkqIhISJRqoN8fdAFFRu/H+fR+zNN7cb5Qvx+2zNiliIiUiFLtoYuIyAIKdBGRkCi5QF9u5sdyYmZbzewJMztiZofN7GNB1xQ0M4ua2R/M7OdB1xI0M2sys4fN7KiZ9ZjZrUHXFBQz+7vs/5FDZvYTM6sOuqb1UFKBnufMj+VkBvikuyeBW4APlfn7AfAxoCfoIorEfwN+5e7XAtdTpu+LmW0BPgp0ufsOMp+nWfazMqWopAKd/GZ+LBvu3u/ue7PPz5L5D7tw4rSyYWbtwF8C3wu6lqCZWSOwi8yH/nD3KXcfDrSoYFUANdmpSWqBVwKuZ12UWqDnM/NjWcp+qciNwDMBlxKk/wr8ZyAdcB3FYDswAPwgewnqe2ZWF3RRQXD3PuC/AC8B/cCIu//vYKtaH6UW6LIIM6sHfgZ83N3PBF1PEMzsr4CT7r4n6FqKRAXwOuC77n4jMAqU5ZiTmW0g85f8dqANqDOz/xhsVeuj1AI9n5kfy4qZxciE+Y/c/ZGg6wnQG4E7zOw4mUtxbzWz/xFsSYHqBXrdffYvtofJBHw5+jfAC+4+4O7TwCPAGwKuaV2UWqDPzfxoZpVkBjYeDbimwGS/Fer7QI+7fyPoeoLk7p9x93Z37yDz7+I37h7KXlg+3P0E8LKZXZNd9TbgSIAlBekl4BYzq83+n3kbIR0gzmtyrmKx1MyPAZcVpDcC7wMOmtm+7LrPZidTE/kI8KNs5+d54J6A6wmEuz9jZg8De8ncGfYHQjoFgD76LyISEqV2yUVERJagQBcRCQkFuohISCjQRURCQoEuIhISCnQRkZBQoIuIhMT/B1ukh/ZKeDGqAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from torch import nn\n",
    "from tqdm import *\n",
    "\n",
    "class Model(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.linear1 = nn.Linear(6, 10)\n",
    "        self.linear2 = nn.Linear(10, 1)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        x = torch.relu(self.linear1(x))\n",
    "        x = self.linear2(x)\n",
    "        return x\n",
    "\n",
    "# 建立模型\n",
    "lr = 0.01\n",
    "model = Model()\n",
    "criterion = nn.MSELoss(reduction='none')\n",
    "trainer = torch.optim.Adam(model.parameters(), lr)\n",
    "\n",
    "num_epochs = 10\n",
    "loss_history = []\n",
    "\n",
    "\n",
    "for epoch in tqdm(range(num_epochs)):\n",
    "    # 批量训练\n",
    "    for X, y in train_loader:\n",
    "        trainer.zero_grad()\n",
    "        l = criterion(model(X), y)\n",
    "        l.sum().backward()\n",
    "        trainer.step()\n",
    "     # 输出损失\n",
    "    model.eval()\n",
    "    with torch.no_grad():\n",
    "        total_loss = 0\n",
    "        for X, y in train_loader:\n",
    "            outputs = model(X)\n",
    "            l = criterion(outputs, y)\n",
    "            total_loss += l.sum()/l.numel()\n",
    "        avg_loss = total_loss / len(train_loader)\n",
    "    print(f'Epoch {epoch+1}: Validation loss = {avg_loss:.4f}')\n",
    "    loss_history.append(avg_loss)\n",
    "    \n",
    "# 使用图表库（例如Matplotlib）绘制损失和准确率的曲线图\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(loss_history, label='loss')\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49fc8644",
   "metadata": {},
   "source": [
    "可以看到模型经过10轮的训练，模型收敛的比较好。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3e81101",
   "metadata": {},
   "source": [
    "## 9.1.4 模型预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29d2511d",
   "metadata": {},
   "source": [
    "接下来我们用它来进行预测，看一下序列模型的效果。我们使用的方法是单步预测，单步预测是指，使用序列模型对序列数据进行预测，只预测序列的下一个元素，一起来看一下。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "2cf8ac3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "preds = model(features)\n",
    "\n",
    "plt.plot(time[:num-6], gs10['GS10'].to_list()[6:num], label='gs10')\n",
    "plt.plot(time[:num-6], preds.detach().numpy(), label='preds')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc8eac7b",
   "metadata": {},
   "source": [
    "单步预测的目标是提前预测出序列的下一个元素，以便在实时场景下处理序列数据。\n",
    "\n",
    "可以看到，虽然预测结果和真实值仍有差异，但大的趋势基本一致。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5713d831",
   "metadata": {},
   "source": [
    "**梗直哥提示：本节我们学习了什么是序列数据，并用时间序列数据进行建模，并看到了单步预测的结果。实际上除了单步预测，还存在多步预测，比如我们想要在$x_t$时间步预测$x_{t+k}$的输出，就是k步预测。只不过随着k值的增加，预测质量会直线下降。更加详细的知识点的掌握，有赖于你在实战中总结经验，慢慢就熟悉了。当然，如果你想大幅节省时间，解答自己在学习中的各种困惑，欢迎选修《梗直哥深度学习：python实战》。**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
